package rapier.sso.server.handler;

import java.util.Set;

import rapier.sso.core.model.UserModel;
import rapier.sso.server.model.Credential;

/**
 * 鉴权处理器
 *
 * @author : Zh1Cheung 945503088@qq.com
 * @date : 2018/6/6 20:21
 */
public interface IAuthenticationHandler {
	
	/**
	 * 鉴权
	 * 
	 * @param params      页面传递过来的参数
	 * @param sessionAttr 特定session属性值，这个值是在跳到login页面前，loginPreHandler通过setSessionVal()
	 *                    方法写入的
	 * @param errors      授权失败时，将失败信息写入此对象
	 * @return 授权成功返回Credentail, 否则返回null
	 */
	public UserModel authenticate(Credential credential) throws Exception;

	/**
	 * 获取当前登录用户可用系统ID列表
	 * 
	 * @param loginUser
	 * @return 返回null表示全部
	 * @throws Exception
	 */
	public Set<String> authedSystemIds(UserModel loginUser) throws Exception;

	/**
	 * 自动登录
	 * 
	 * @param tg
	 * @return
	 * @throws Exception
	 */
	public UserModel autoLogin(String tg) throws Exception;

	/**
	 * 生成自动登录标识
	 * 
	 * @param loginUser
	 * @return
	 * @throws Exception
	 */
	public String loginToken(UserModel loginUser) throws Exception;

	/**
	 * 清除用户自动登录信息
	 * 
	 * @param loginUser
	 * @return
	 * @throws Exception
	 */
	public void clearLoginToken(UserModel loginUser) throws Exception;
}
